﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using BussinessLogic;

namespace SchoolManagement.AutoEvaluacion
{



    public partial class Login : System.Web.UI.Page
    {
        //private int _codigoAplicacion;
        bool accessTimeValidated = true;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {

                //bool accessTimeSpecified = false;
                // _codigoAplicacion = Convert.ToInt32(ConfigurationManager.AppSettings["SecurityAppCode"].ToString());
                // Validamos el horario de entrada desde el servidor.
                // _seguridadTrasversal.ValidateAccessTime(Convert.ToInt32(ConfigurationManager.AppSettings["SecurityAppCode"].ToString()), true, out accessTimeValidated, out accessTimeSpecified);
                if (!accessTimeValidated)
                {
                    Server.Transfer("~/AutoEvaluacion/AccesoDenegado.aspx", true);
                }

                if (!Page.IsPostBack)
                {
                    ScriptManager1.SetFocus(txtUserName);
                    txtPassword.Attributes.Add("onkeydown", "if(event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('" + btnIngresar.ClientID + "').click();return false;}} else {return true}; ");
                }
            }
            catch (Exception ex)
            {
                ShowMessageBox(2, ex.Message);
            }
        }

        /// <summary>
        /// Handler para manejar la autenticación.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnIngresar_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;
            try
            {
                string sDireccionIP = Request.UserHostAddress.ToString();
                string sNombreEquipo = Request.UserHostName.ToString();

                UsuarioEval usuario = new UsuarioEval(txtUserName.Text, txtPassword.Text);
                if(usuario.Login != null && usuario.Login.Length > 0)
                {
                    // Direccionamos a la página de Inicio.
                    Session["UsuarioEval"] = usuario;
                    Response.Redirect("~/AutoEvaluacion/AutoEvaluacion.aspx", false);
                }
                else
                {
                    ShowConfirmBox("El usuario ["+ txtUserName.Text + "], no se encuentra registrado. Intente de nuevo");
                }
            }
            catch (Exception ex)
            {
                ShowMessageBox(2, ex.Message);
            }
        }

        /// <summary>
        /// apartir del DataTableGenera la estructura de Roles de Usuario de la aplicación.
        /// </summary>
        /// <param name="dataTable"></param>
        /// <returns></returns>
        private List<UserRole> CrearRolesUsuario(DataTable dataTable)
        {
            List<UserRole> roles = new List<UserRole>();
            UserRole rol = null;
            if (dataTable != null && dataTable.Rows.Count > 0)
            {
                foreach (DataRow row in dataTable.Rows)
                {
                    rol = new UserRole(row["IdRole"].ToString(), row["RoleName"].ToString());
                    roles.Add(rol);
                }
            }
            else
            {
                throw new ArgumentException("El DataTable: " + dataTable.TableName + " esta vacio", "dataTable");
            }
            return roles;
        }


        /// <summary>
        /// Crea un Tipo de Usuario apartir de la entrada de un String.
        /// </summary>
        /// <param name="userTypeString"></param>
        /// <returns></returns>
        private UserType CrearTipo(string userTypeString)
        {
            switch (userTypeString)
            {
                case "0":
                    return UserType.Interno;
                case "1":
                    return UserType.Externo;
                default:
                    throw new ArgumentException("No es un Tipo Registrado", "statusTypeSting");
            }
        }

        /// <summary>
        /// Crea el Estado del Usuario Dependiendo del string de entrada.
        /// </summary>
        /// <param name="statusIdString"></param>
        /// <returns></returns>
        private Status CrearEstado(string statusIdString)
        {
            switch (statusIdString)
            {
                case "1":
                    return Status.Activo;
                case "0":
                    return Status.Inactivo;
                case "2":
                    return Status.PendienteContrasena;
                default:
                    throw new ArgumentException("No es un estado Registrado", "statusIdSting");
            }

        }


        /// <summary>
        /// Método para Visualizar el Message Box.
        /// </summary>
        /// <param name="iTipo"></param>
        /// <param name="sMsgBox"></param>
        protected void ShowMessageBox(int iTipo, string sMsgBox)
        {
            string sRutaImagen = "";
            switch (iTipo)
            {
                case 1:
                    {
                        sRutaImagen = "~/AutoEvaluacion/Images/msgInformacion.jpg";
                        lblMessage.ForeColor = System.Drawing.Color.Black;
                        break;
                    }
                case 2:
                    {
                        sRutaImagen = "~/AutoEvaluacion/Images/msgExclamacion.jpg";
                        lblMessage.ForeColor = System.Drawing.Color.Red;
                        break;
                    }
            }
            ImgMsgBox.ImageUrl = sRutaImagen;
            lblMessage.Text = sMsgBox;
            mpe_MsgBox.Show();
            ScriptManager1.SetFocus(btnMsgAceptar);
        }

        /// <summary>
        /// Muestra un Mensaje al usuario  en un poup.
        /// </summary>
        /// <param name="sMsgBox"></param>
        public void ShowConfirmBox(string sMsgBox)
        {
            lblConfirmText.ForeColor = System.Drawing.Color.Black;
            lblConfirmText.Text = sMsgBox;
            mpe_ConfirmBox.Show();
            ScriptManager1.SetFocus(btnAceptarConfirmBox);
        }

        /// <summary>
        /// Handler que maneja el evento del Boton Aceptar del PopUp de Confirmación.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ButtonClickedHandler(object sender, EventArgs e)
        {
            try
            {
                string sSession = "";
                //  Se cierra la sesión existente.
                sSession = string.Empty;
                //_seguridadTrasversal.KillRemoteUserSession(_codigoAplicacion, true, txtUserName.Text);
                // Se almacena el id de la sesión cerrada en los Parametros de la Aplicacion
                Hashtable htSessionsToEnd = (Hashtable)Application["htSessionsToEnd"];
                if (htSessionsToEnd == null) htSessionsToEnd = new Hashtable();
                Application.Lock();
                htSessionsToEnd[sSession] = sSession;
                Application["htSessionsToEnd"] = htSessionsToEnd;
                Application.UnLock();
                ShowMessageBox(1, "Su sesión ha sido terminada exitosamente. Intente acceder nuevamente a la aplicación.");
            }
            catch (Exception ex)
            {
                Trace.Warn("ButtonClickedHandler", ex.Message);
                ShowMessageBox(2, ex.Message);
            }
        }
    }
}
